package com.seecen.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.seecen.pojo.entity.Message;
import com.seecen.service.MessageService;
import com.seecen.mapper.MessageMapper;
import com.seecen.utils.Result;
import com.seecen.utils.SecurityContextUtil;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author xuxin
* @description 针对表【t_message(系统消息表)】的数据库操作Service实现
* @createDate 2025-10-16 10:19:26
*/
@Service
public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message>
        implements MessageService{

    @Override
    public Result getMessage() {
        try {
            // 从上下文中获取当前登录用户ID
            Long userId = SecurityContextUtil.getCurrentUserId();
            if (userId == null) {
                return Result.build(null, 504, "用户未登录");
            }

            // 构建查询条件
            QueryWrapper<Message> queryWrapper = new QueryWrapper<>();
            // 只查询需要的字段，避免关联查询
            queryWrapper.select("id", "type", "title", "content", "users", "create_time");
            // 查询未删除的消息
            queryWrapper.eq("is_deleted", 0);
            
            // 查询条件：
            // 1. users字段包含当前用户ID（针对特定用户的消息）
            // 2. users字段为NULL（全局消息，所有用户可见）
            // 3. users字段为'ALL'（全局消息，所有用户可见）
            queryWrapper.and(wrapper -> wrapper
                .apply("FIND_IN_SET({0}, users) > 0", userId.toString())  // 包含用户ID
                .or()
                .isNull("users")  // 全局消息（NULL）
                .or()
                .eq("users", "ALL")  // 全局消息（'ALL'）
            );
            
            // 按创建时间倒序排列
            queryWrapper.orderByDesc("create_time");

            // 使用baseMapper直接执行查询，避免懒加载
            List<Message> messageList = baseMapper.selectList(queryWrapper);

            return Result.ok(messageList);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.build(null, 500, "获取消息失败");
        }
    }
}




